package br.com.sisgerenciamento.model.cliente;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import br.com.sisgerenciamento.dto.cliente.ClienteDTO;
import br.com.sisgerenciamento.dto.endereco.EnderecoDTO;
import br.com.sisgerenciamento.model.endereco.EnderecoVO;
import br.com.sisgerenciamento.model.usuario.UsuarioVO;
import br.com.sisgerenciamento.utilidades.TreatDate;

@Entity
@Table(name = "CLIENTE")
public class ClienteVO {
	
	@Id
	@GeneratedValue
	private Long codigo;
	
	@Temporal(TemporalType.DATE)
	private Date dataCadastro;
	
	@Column(length = 150)
	private String nome;
	
	@Temporal(TemporalType.DATE)
	private Date dataNascimento;
	
	@Column(length = 15)
	private String cpf;
	
	@Column(length = 15)
	private String rg;
	
	@Column(length = 20)
	private String cnpj;
	
	@Column(length = 20)
	private String ie;
	
	@Column(length = 15)
	private String telefone;
	
	@Column(length = 15)
	private String telefone2;
	
	@Column(length = 15)
	private String celular;
	
	@Column(length = 15)
	private String celular2;
	
	@Column(length = 50)
	private String email;
	
	private Boolean status;
	
	@ManyToOne(fetch =  FetchType.EAGER)
	@JoinColumn(name = "usuario")
	private UsuarioVO usuario;
	
	@Enumerated(EnumType.ORDINAL)
	private TipoClienteEnum tipo;
	
	@OneToMany(mappedBy = "cliente", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
	private List<EnderecoVO> enderecos;
	
	public ClienteDTO getDTO(){
		ClienteDTO dto = new ClienteDTO();
		dto.setCodigo(getCodigo().toString());
		dto.setEnderecos(new ArrayList<EnderecoDTO>());
		if(getEnderecos() != null)
			for (EnderecoVO vo : getEnderecos()) {
				EnderecoDTO enderecoDTO = vo.getDTO();
				enderecoDTO.setEnums();
				dto.getEnderecos().add(enderecoDTO);
			}
		dto.setDataCadastro(TreatDate.formatDefaultDate(getDataCadastro()));
		dto.setNome(getNome());
		dto.setDataNascimento(TreatDate.formatDefaultDate(getDataNascimento()));
		dto.setCpf(getCpf());
		dto.setRg(getRg());
		dto.setCnpj(getCnpj());
		dto.setIe(getIe());
		dto.setTelefone(getTelefone());
		dto.setCelular(getCelular());
		dto.setTelefone2(getTelefone2());
		dto.setCelular2(getCelular2());
		dto.setEmail(getEmail());
		dto.setStatus(getStatus() != null && getStatus() ? "1" : "0");
//		dto.setUsuario(getUsuario().getDTO());
		dto.setTipo(getTipo() != null ? getTipo().getValor() : null);
		
		
		return dto;
	}

	public Long getCodigo() {
		return codigo;
	}
	public void setCodigo(Long codigo) {
		this.codigo = codigo;
	}
	public Date getDataCadastro() {
		return dataCadastro;
	}
	public void setDataCadastro(Date dataCadastro) {
		this.dataCadastro = dataCadastro;
	}
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public Date getDataNascimento() {
		return dataNascimento;
	}
	public void setDataNascimento(Date dataNascimento) {
		this.dataNascimento = dataNascimento;
	}
	public String getCpf() {
		return cpf;
	}
	public void setCpf(String cpf) {
		this.cpf = cpf;
	}
	public String getRg() {
		return rg;
	}
	public void setRg(String rg) {
		this.rg = rg;
	}
	public String getTelefone() {
		return telefone;
	}
	public void setTelefone(String telefone) {
		this.telefone = telefone;
	}
	public String getCelular() {
		return celular;
	}
	public void setCelular(String celular) {
		this.celular = celular;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public Boolean getStatus() {
		return status;
	}
	public void setStatus(Boolean status) {
		this.status = status;
	}
	public TipoClienteEnum getTipo() {
		return tipo;
	}
	public void setTipo(TipoClienteEnum tipo) {
		this.tipo = tipo;
	}
	public List<EnderecoVO> getEnderecos() {
		return enderecos;
	}
	public void setEnderecos(List<EnderecoVO> enderecos) {
		this.enderecos = enderecos;
	}
	public UsuarioVO getUsuario() {
		return usuario;
	}
	public void setUsuario(UsuarioVO usuario) {
		this.usuario = usuario;
	}
	public String getTelefone2() {
		return telefone2;
	}
	public void setTelefone2(String telefone2) {
		this.telefone2 = telefone2;
	}
	public String getCelular2() {
		return celular2;
	}
	public void setCelular2(String celular2) {
		this.celular2 = celular2;
	}

	public String getCnpj() {
		return cnpj;
	}

	public void setCnpj(String cnpj) {
		this.cnpj = cnpj;
	}

	public String getIe() {
		return ie;
	}

	public void setIe(String ie) {
		this.ie = ie;
	}
	
	
	
}
